--- /dev/null
+/* testclientmessage.c\r
+ * Copyright (C) 2008 Novell, Inc.\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Library General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 2 of the License, or (at your option) any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ * Library General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Library General Public\r
+ * License along with this library; if not, write to the\r
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\r
+ * Boston, MA 02111-1307, USA.\r
+ */\r
+\r
+#include <gtk/gtk.h>\r
+\r
+static GdkAtom my_type;\r
+static GdkAtom random_type;\r
+\r
+static void\r
+send_known (void)\r
+{\r
+ GdkEvent *event = gdk_event_new (GDK_CLIENT_EVENT);\r
+ static int counter = 42;\r
+ int i;\r
+ \r
+ event->client.window = NULL;\r
+ event->client.message_type = my_type;\r
+ event->client.data_format = 32;\r
+ event->client.data.l[0] = counter++;\r
+ for (i = 1; i < 5; i++)\r
+ event->client.data.l[i] = 0;\r
+\r
+ gdk_screen_broadcast_client_message (gdk_display_get_default_screen (gdk_display_get_default ()), event);\r
+ \r
+ gdk_event_free (event);\r
+}\r
+\r
+void\r
+send_random (void)\r
+{\r
+ GdkEvent *event = gdk_event_new (GDK_CLIENT_EVENT);\r
+ static int counter = 1;\r
+ int i;\r
+ \r
+ event->client.window = NULL;\r
+ event->client.message_type = random_type;\r
+ event->client.data_format = 32;\r
+ event->client.data.l[0] = counter++;\r
+ for (i = 1; i < 5; i++)\r
+ event->client.data.l[i] = 0;\r
+\r
+ gdk_screen_broadcast_client_message (gdk_display_get_default_screen (gdk_display_get_default ()), event);\r
+ \r
+ gdk_event_free (event);\r
+}\r
+\r
+static GdkFilterReturn\r
+filter_func (GdkXEvent *xevent,\r
+ GdkEvent *event,\r
+ gpointer data)\r
+{\r
+ g_print ("Got matching client message!\n");\r
+ return GDK_FILTER_REMOVE;\r
+}\r
+\r
+int\r
+main (int argc, char **argv)\r
+{\r
+ GtkWidget *window;\r
+ GtkWidget *vbox;\r
+ GtkWidget *button;\r
+\r
+ gtk_init (&argc, &argv);\r
+\r
+ my_type = gdk_atom_intern ("GtkTestClientMessage", FALSE);\r
+ random_type = gdk_atom_intern (g_strdup_printf ("GtkTestClientMessage-%d",\r
+ g_rand_int_range (g_rand_new (), 1, 99)),\r
+ FALSE);\r
+\r
+ g_print ("using client message type %s\n", gdk_atom_name (my_type));\r
+\r
+ window = g_object_connect (g_object_new (gtk_window_get_type (),\r
+ "type", GTK_WINDOW_TOPLEVEL,\r
+ "title", "testclientmessage",\r
+ "border_width", 10,\r
+ NULL),\r
+ "signal::destroy", gtk_main_quit, NULL,\r
+ NULL);\r
+ vbox = g_object_new (gtk_vbox_get_type (),\r
+ "GtkWidget::parent", window,\r
+ "GtkWidget::visible", TRUE,\r
+ NULL);\r
+ button = g_object_connect (g_object_new (gtk_button_get_type (),\r
+ "GtkButton::label", "send known client message",\r
+ "GtkWidget::parent", vbox,\r
+ "GtkWidget::visible", TRUE,\r
+ NULL),\r
+ "signal::clicked", send_known, NULL,\r
+ NULL);\r
+ button = g_object_connect (g_object_new (gtk_button_get_type (),\r
+ "GtkButton::label", "send random client message",\r
+ "GtkWidget::parent", vbox,\r
+ "GtkWidget::visible", TRUE,\r
+ NULL),\r
+ "signal::clicked", send_random, NULL,\r
+ NULL);\r
+ gdk_display_add_client_message_filter (gdk_display_get_default (),\r
+ my_type,\r
+ filter_func,\r
+ NULL);\r
+ gtk_widget_show (window);\r
+\r
+ gtk_main ();\r
+\r
+ return 0;\r
+}\r